#ifndef _H_BASEDECK
#define _H_BASEDECK

#include <string>
#include <iostream>
#include <vector>
#include <list>

class baseCard;
class baseToken;

class baseDeck
{
    private:
        std::list<baseCard*> cards;

    public:
        // Constructor
        baseDeck();
        baseDeck(std::list<baseCard*> aCards);

        // Accessor
        std::list<baseCard*> getCards();

        // Print
        std::string toString();
        void toString(std::ostream &out);
        void toString(std::string &str);

        int countCards();
        void addCardTop(baseCard* aCard);
        void addCardBottom(baseCard* aCard);
        void removeCard(baseCard* aCard);
        baseCard* draw();
        void trashTop();
        void shuffle();
        bool empty();

    private:
        std::string cardsListToString();
};

#endif //_H_BASEDECK